package com.csx.springcloud.invoke.resttemplate.config;

import com.csx.springcloud.invoke.resttemplate.ext.RestClientHttpRequestInterceptor;
import com.csx.springcloud.invoke.resttemplate.ext.RestCustomErrorHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {

        RestTemplate restTemplate = new RestTemplate(factory);

        // 添加自定义错误处理器
        restTemplate.setErrorHandler(new RestCustomErrorHandler());

        // 添加自定义拦截器
        restTemplate.getInterceptors().add(new RestClientHttpRequestInterceptor());


        return restTemplate;
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {

        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

        // 设置读超时时间. 单位: 毫秒
        factory.setReadTimeout(5000);

        // 设置连接超时时间. 单位: 毫秒
        factory.setConnectTimeout(15000);

        return factory;
    }
}
